import os
from 参数传入 import (
    user_input_previous_text, 
    user_input_chapter_outline, 
    user_input_novel_framework, 
    user_input_chapter_goal
) # 只导入用户数据
from llm_manager import get_llm_client
from prompt_manager import get_active_prompt # 导入新的提示词加载函数

# --- 函数定义 ---
def generate_plot_directions(
    llm_client,
    base_plot_prompt: str,
    previous_text: str,
    chapter_outline: str,
    novel_framework: str | None = None,
    chapter_goal: str | None = None
) -> str:
    """
    调用配置好的大模型生成后续情节发展方向。
    参数:
        llm_client: 已初始化的LLM客户端实例。
        base_plot_prompt (str): 从 prompt_manager 加载的激活的基础提示词。
        ...
    """
    try:
        input_content = f"【上文内容】 (Previous Text):\n{previous_text}\n\n"
        input_content += f"【本章细纲】 (Current Chapter Outline / Xìgāng):\n{chapter_outline}\n"
        if novel_framework:
            input_content += f"\n（可选）【整体框架】(Optional Novel Framework):\n{novel_framework}\n"
        if chapter_goal:
            input_content += f"\n（可选）【本章核心目标】(Optional Chapter Goal):\n{chapter_goal}\n"
        final_prompt_to_send = f"{base_plot_prompt}\n\n输入内容:\n{input_content}"
        messages = [
            {
                "role": "user",
                "content": final_prompt_to_send
            }
        ]
        response = llm_client.chat_completions_create(
            messages=messages,
            stream=False
        )
        if response and hasattr(response, 'choices') and response.choices:
            generated_content = response.choices[0].message.content
            return generated_content
        else:
            print(f"[generate_plot_directions] 模型响应无效。响应: {response}")
            return "模型未能生成有效内容，请检查API调用或提示词。"
    except Exception as e:
        return f"调用API生成情节方向时发生错误: {e}"

# --- 主程序执行 ---
if __name__ == "__main__":
    TASK_NAME = "plot_direction"
    print(f"开始为任务 '{TASK_NAME}' 调用大模型 (通过LLM和Prompt管理器)...")

    try:
        llm_client_for_task = get_llm_client(TASK_NAME)
        active_prompt_for_task = get_active_prompt(TASK_NAME)
        print(f"使用模型配置: {llm_client_for_task.__class__.__name__} (模型: {getattr(llm_client_for_task, 'model_name', 'N/A')})")
        print(f"使用提示词 (部分预览):\n{active_prompt_for_task[:200]}...")
    except Exception as e:
        print(f"错误：无法初始化LLM客户端或加载提示词: {e}")
        exit(1)

    print(f"加载的【上文内容】 (部分预览):\n{user_input_previous_text[:200]}...")
    print(f"加载的【本章细纲】 (部分预览):\n{user_input_chapter_outline[:200]}...")
    if user_input_novel_framework:
        print(f"加载的【整体框架】 (部分预览):\n{user_input_novel_framework[:100]}...")
    if user_input_chapter_goal:
        print(f"加载的【本章核心目标】 (部分预览):\n{user_input_chapter_goal[:100]}...")

    plot_directions_response = generate_plot_directions(
        llm_client=llm_client_for_task,
        base_plot_prompt=active_prompt_for_task,
        previous_text=user_input_previous_text,
        chapter_outline=user_input_chapter_outline,
        novel_framework=user_input_novel_framework,
        chapter_goal=user_input_chapter_goal
    )

    print("\n--- 模型输出的情节方向预测 (Markdown格式) ---")
    print(plot_directions_response)
    print("--- 输出结束 ---")

    # 关于调试和稳定性：
    # 1. 确保 PROMPT_PLOT_DIRECTION, user_input_previous_text, user_input_chapter_outline 
    #    在 `参数传入.py` 中有正确的定义和内容。
    # 2. `novel_framework` 和 `chapter_goal` 是可选的，如果它们在 `参数传入.py` 中未定义或为None/空字符串，
    #    脚本也能正常处理。
    # 3. 返回的是Markdown格式的文本，您可以直接将其粘贴到支持Markdown的编辑器中查看。
    # 4. 如果模型输出不符合预期，首先检查 `PROMPT_PLOT_DIRECTION` 是否完全准确，
    #    其次是输入的文本质量和清晰度。 